﻿using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Serwer
{
    class Program
    {
        static int licznik = 1, kiedyWyslac = 0;
        static Random rndLosuj = new Random();

        static void Main(string[] args)
        {
            kiedyWyslac = rndLosuj.Next(1, 11) + licznik;

            Timer powiadomienieTimer = new Timer(powiadomienie);
            powiadomienieTimer.Change(0, 1000);

            Thread glownyWatek = new Thread(watek);
            glownyWatek.Start();
        }

        static void watek()
        {
            Socket gniazdko = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            gniazdko.Bind(new IPEndPoint(IPAddress.Any, 1234));
            gniazdko.Listen(10);

            for(;;)
            {
                Socket gniazdkoKlient = gniazdko.Accept();

                lock (Klient.listaKlientow)
                {
                    Klient.listaKlientow.Add(new Klient(gniazdkoKlient));
                }
            }
        }

        static void powiadomienie(Object obj)
        {
            if (licznik % 2 == 0)
            {
                lock (Klient.listaKlientow)
                {
                    foreach (var element in Klient.listaKlientow)
                    {
                        if (element.CzyWyslanoPowiadomienie == true && element.CzyOdpowiedz == false)
                            element.wyslijPowiadomienie();
                    }
                }
            }

            if (licznik == kiedyWyslac)
            {
                lock (Klient.listaKlientow)
                {
                    foreach (var element in Klient.listaKlientow)
                    {
                        if (!element.CzyWyslanoPowiadomienie && element.CzyOdpowiedz)
                            element.wyslijPowiadomienie();
                    }
                }

                kiedyWyslac = rndLosuj.Next(1, 11) + licznik;
            }
            licznik++;
        }
    }
}
